$NG.AllReady(function (page, { useValuesChange, useClick, useDataIndexChange, useUpdateRows, useUpdateRow }) {
  const mstform = $NG.getCmpApi("p_form_std_itemdata_req");
  const dgrid = $NG.getCmpApi("p_form_std_itemdata_req_d1");
  const toolbar_dgrid = $NG.getCmpApi("toolbar_p_form_std_itemdata_req_d1");
  if (page.oType == "add") {
    // 从本地存储中设置二级部门
    let phid_org = localStorage.getItem("material_apply_phid_org");
    let phid_org_EXName = localStorage.getItem("material_apply_phid_org_name");
    if (phid_org) {
      mstform.getItem("phid_org").setValue({
        value: phid_org,
        label: phid_org_EXName,
      });
    }

    const param = parseUrlParams(location.href);
    // console.log(param);
    if (param.status == "ToMaterial") {
      // 读取本地存储
      const _map = JSON.parse(localStorage.getItem("material_apply_data"));
      // console.log(`_map`,_map);
      // 检查日期是否过长
      const endTime = 1000 * 30;
      if (new Date() - _map.time < endTime) {
        //将数据全部放到明细
        const data = _map.data.reduce((value, item) => {
          value.push({
            u_item_name: item.itemname,
            u_msunit: item.msunit,
            u_msunit_EXName: item.msunit_EXName,
            u_resbs: item.category,
            u_resbs_EXName: item.category_EXName,
            u_spec: item.spec,
            u_source_table: item.tableName,
            u_source_phid: item.source,
          });
          return value;
        }, []);
        // console.log(`增行数据`,data);
        dgrid.addRows([...data]);
      } else {
        // 确认提示框
        $NG.confirm(`当前页面为下推数据新增，当前刷新时检查数据已过期，请重新下推！`).then(function (result) {
          $NG.close();
        });
      }
    }
  }
  // 解析参数
  function parseUrlParams(url) {
    const paramsObj = {};
    const queryString = url.split("?")[1];
    const paramPairs = queryString.split("&");
    paramPairs.forEach((paramPair) => {
      const [key, value] = paramPair.split("=");
      const decodedValue = decodeURIComponent(value);
      paramsObj[key] = decodedValue;
    });
    return paramsObj;
  }
  //去重
  function removeDuplicatesByKeys(arr) {
    const uniqueMap = new Map();
    for (const obj of arr) {
      // 生成一个由 ItemName、PhidResbs 和 PhidMsunit 组合而成的唯一键
      const key = `${obj.ItemName}-${obj.Spec}-${obj.PhidMsunit}`;
      if (!uniqueMap.has(key)) {
        // 如果该键还未存在于 Map 中，则将对象存入
        uniqueMap.set(key, obj);
      }
    }
    // 将 Map 中的值（即去重后的对象）提取到一个新数组中
    return Array.from(uniqueMap.values());
  }
  //匹配物料主请求
  async function getWlRequest(list) {

    const url = window.location.href;
    const protocol = $NG.split(url, "/")[0]; // 协议类型
    const url_domain = $NG.split(url, "/")[2]; // 直接提取域名部分
    const url_path = "/sd/common/interior/createResourceFileSync"; // 路径
    const response = await fetch(`${protocol}//${url_domain}${url_path}`, {
      method: "POST",
      headers: {
        "Content-Type": "application/json", // 设置请求头
      },
      body: JSON.stringify(list),
    });
    
    const res = await response.json();
    // console.log(`请求数据`, res);
    if (res.IsOk) {
      //新增成功
      user_match(); //重新匹配
      [1, 2].forEach((item) => {
        $NG.message(`正在重新匹配，请勿操作等待提示完成！！！%`);
      });
      timeMax = setTimeout(() => {
        $NG.alert("匹配超时！！！");
      }, 1000 * 90);
      $NG.alert("匹配完成！ 100%");
      dgrid.refreshView();
      clearTimeout(timeMax);
    } else {
      if (res.data == "批量新增失败，入参为空！") {
        $NG.alert("匹配完成，入参为空！");
        dgrid.refreshView();
      } else {
        $NG.alert("匹配错误！");
        dgrid.refreshView();
      }
    }
  }
  // 增加匹配物料
  toolbar_dgrid.insert({
    id: "user_match",
    text: "匹配物料",
    iconCls: "icon-InsertRow",
  });
  let setILock = 0;
  useClick(async () => {
    if (setILock) return;
    window.list = [];
    window.startNum = 0;
    window.endNum = 0;
    // 检查是否包含已有物料
    $NG.message(`正在匹配，请勿操作等待提示完成！！！%`);
    user_match();
    setILock = setInterval(() => {
      if (window.start == window.end) {
        // 开始推送
        // console.log(`数据准备完毕开始推送~`,window.list);
        //再次检查物料存在与否
        const inIs = isIn();
        if (inIs.length != 0) {
          $NG.alert(`当前明细包含已存在物料，请先删除！提示：第 ${inIs.join("、")} 行`);
          clearInterval(setILock);
          setILock = 0;
          return;
        }
        //去重开始
        const finalData = removeDuplicatesByKeys(window.list);
        clearInterval(setILock);
        getWlRequest(finalData);
        setILock = 0;
      } else {
        $NG.message(`正在匹配中，请耐心等待。  ${(window.startNum / (dgrid.getRows().length * 3)).toFixed(4) * 100}%`);
        window.endNum = window.startNum;
      }
    }, 1000);
  }, "user_match");

  //匹配物料逻逻辑
  function user_match() {
    // console.log(`开始咯！！`);
    const _arr = dgrid.getRows();
    _arr.forEach((item) => {
      if (item.u_item) {
        $NG.execServer("getItemdataByPhid", { phid: item.u_item }, (res) => {
          window.startNum += 1;
          if (res.count > 0) {
            const _data = JSON.parse(res.data)[0].extendObjects;
            item.u_item_name = _data.itemname;
            item.u_resbs = _data.phid_resbs;
            item.u_resbs_EXName = _data.name;
            item.u_msunit = _data.msunit_phid;
            item.u_msunit_EXName = _data.msunit_name;
            item.u_spec = _data.spec;
            item.in = true;
            dgrid.refreshView();
          }
        });
      } else if ((item.u_item_name ? String(item.u_item_name).trim : null) && (item.u_resbs ? String(item.u_resbs).trim : null) && (item.u_msunit ? String(item.u_msunit).trim : null) && (item.u_spec ? String(item.u_spec).trim : null)) {
        //换查找方式继续查询物料
        $NG.execServer(
          "getItemDataByName",
          {
            itemname: `'${item.u_item_name}'`,
            spec: `'${item.u_spec}'`,
            msunit: `'${item.u_msunit}'`,
          },
          (res1) => {
            window.startNum += 1;
            if (res1.count > 0) {
              const _item = JSON.parse(res1.data)[0].extendObjects;
              item.u_item = _item.phid;
              item.u_item_EXName = _item.itemno;
              item.in = true;
            } else {
              // 查找相应资源类型
              $NG.execServer("getResBsByphid", { phid: item.u_resbs }, (res2) => {
                window.startNum += 1;
                if (res2.count > 0) {
                  const el = JSON.parse(res2.data)[0].extendObjects;
                  //物料不存在，预备数据
                  window.list.push({
                    ItemName: item.u_item_name,
                    PhidResbs: item.u_resbs,
                    PhidMsunit: item.u_msunit,
                    Spec: item.u_spec,
                    ResBsCode: item.u_resbs,
                    ResourceType: el.resource_type,
                  });
                }
              });
            }
          }
        );
      }
    });
  }

  //检查是否包含存在的物料明细
  function isIn() {
    const arr = [];
    dgrid.getRows().forEach((item, index) => {
      if (item.u_item || item.in) {
        arr.push(index + 1);
      }
    });
    dgrid.refreshView();
    return arr;
  }
});
